package com.woniu.aimd.controller;

import com.woniu.aimd.pojo.DTO.LinearAlgebraQuiz;
import com.woniu.aimd.util.ResultObj;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;

//@CrossOrigin(origins = "*")
@RestController
@RequestMapping("ai")
public class ChoiceQuestionController {

    private static final Logger logger = LoggerFactory.getLogger(ChoiceQuestionController.class);

    @Resource
    @Qualifier("deepSeekChatClientYMH")
    private ChatClient deepSeekChatClientYMH;

    @PostMapping("questions")
    public ResultObj<LinearAlgebraQuiz> generateQuestions(
            @RequestParam(defaultValue = "5") Integer num,
            @RequestParam(defaultValue = "") String questionclass) {

        if (num == null || num <= 0 || num > 50) {
            return ResultObj.error(400, "题目数量应为 1 到 50 之间");
        }

        if (questionclass == null || questionclass.isBlank()) {
            return ResultObj.error(400, "题目类型不能为空");
        }

        try {
            LinearAlgebraQuiz quiz = generateQuiz(num, questionclass);
            return ResultObj.success(quiz);
        } catch (Exception e) {
            logger.error("生成题目失败: {}", e.getMessage(), e);
            return ResultObj.error(500, "生成题目失败，请稍后再试");
        }
    }

    private LinearAlgebraQuiz generateQuiz(int num, String questionclass) {
        String promptText = String.format("""
            请你生成 %d 道关于【%s】的选择题，并以严格的 JSON 格式返回：
            {
                "questions": [
                    {
                        "header": "问题内容",
                        "choices": ["选项A", "选项B", "选项C", "选项D"],
                        "rightanswer": 正确答案的选项字母要有一定随机性
                    }
                ]
            }
            要求：
            1. JSON 严格符合结构，不添加注释或解释说明
            2. 每题必须有 4 个选项，格式一样
            3. 正确答案只能为 A、B、C 或 D
            4. 不要包含 markdown 或代码块标记
            5. 输出必须是纯 JSON（不包含额外文字）
            6.除了专业术语外，题干和选项都是中文
            """, num, questionclass);

        logger.info("Prompt sent to AI: {}", promptText);

        return deepSeekChatClientYMH.prompt()
                .user(u -> u.text(promptText))
                .call()
                .entity(LinearAlgebraQuiz.class);
    }
}
